package config

import (
	"time"
)

type Config struct {
	Server   Server `mapstructure:"server" json:"server" yaml:"server"`
	Database string `json:"database" yaml:"database"`
	Mysql    Mysql  `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
	Postgres    Postgres  `mapstructure:"postgres" json:"postgres" yaml:"postgres"`
	Sqlite   Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
	Jwt      Jwt    `mapstructure:"jwt" json:"jwt" yaml:"jwt"`
	Casbin   string `json:"casbin" yaml:"casbin"`
	Logger   Logger `mapstructure:"logger" json:"logger" yaml:"logger"`
}

type Server struct {
	Host string `json:"host" yaml:"host"`
	Port uint   `json:"port" yaml:"port"`
}

type Casbin struct {
	Model string `json:"model" yaml:"model"`
}

type Jwt struct {
	Key      string        `json:"key" yaml:"key"`
	Issuer   string        `json:"issuer" yaml:"issuer"`
	Subject  string        `json:"subject" yaml:"subject"`
	Duration time.Duration `json:"duration" yaml:"duration"`
}

type Mysql struct {
	UserName     string `json:"username" yaml:"username"`
	Password     string `json:"password" yaml:"password"`
	Host         string `json:"host" yaml:"host"`
	Port         int    `json:"port" yaml:"port"`
	DBName       string `json:"dbname" yaml:"dbname"`
	Option       string `json:"option" yaml:"option"`
	MaxIdleConns int    `json:"maxIdleConns" yaml:"maxIdleConns"`
	MaxOpenConns int    `json:"maxOpenConns" yaml:"maxOpenConns"`
	//LogMode int `json:"logMode" yaml:"logMode"`
}

type Postgres struct {
	UserName     string `json:"username" yaml:"username"`
	Password     string `json:"password" yaml:"password"`
	Host         string `json:"host" yaml:"host"`
	Port         int    `json:"port" yaml:"port"`
	DBName       string `json:"dbname" yaml:"dbname"`
}

type Sqlite struct {
	Dbname string `json:"dbname" yaml:"dbname"`
}
type Logger struct {
	//logger:
	//level: "DEBUG" #输出日志等级
	//path: "./logs/gintify.log" #日志文件的位置
	//size: 1 # 在进行切割之前，日志文件的最大大小（以MB为单位）
	//count: 5 #保留旧文件的最大个数
	//age: 10 # 保留旧文件的最大天数
	//compress: false #是否压缩/归档旧文件
	Level    string `json:"level" yaml:"level"`
	Path     string `json:"path" yaml:"path"`
	Size     int    `json:"size" yaml:"size"`
	Count    int    `json:"count" yaml:"count"`
	Age      int    `json:"age" yaml:"age"`
	Compress bool   `json:"compress" yaml:"compress"`
}

//
//func RegisterConfig () (*viper.Viper, error) {
//	v := viper.New();
//
//	//设置配置文件的名字
//	v.SetConfigName("config")
//
//	//设置配置文件类型
//	v.SetConfigType("yaml");
//
//	//添加配置文件所在的路径,注意在Linux环境下%GOPATH要替换为$GOPATH
//	//v.AddConfigPath("%GOPATH/src/")
//	v.AddConfigPath("./")
//
//	if err := v.ReadInConfig(); err != nil{
//		return  nil, err;
//	}
//
//	//log.Printf("age: %s, name: %s \n", c.v.Get("information.age"), c.v.Get("information.name"));
//	return v, nil;
//}
